package com.bstech.Tabelle;

import java.util.List;
import java.util.Vector;

import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.bstech.Classi.Common;
import com.bstech.Utils.*;

public class Tecnici {
	public static String TABLE_NAME = "TECNICI";

	public static String ID_KEY = "ID";
	public static String DITTA_KEY = "DITTA";
	public static String CODICE_KEY = "CODICE";
	public static String DESCRIZIONE_KEY = "DESCRIZIONE";
	public static String USERNAME_KEY = "USERNAME";
	public static String PASSWORD_KEY = "PASSWORD";

	public static String CREATE_TABLE_QUERY = "CREATE TABLE IF NOT EXISTS "
			+ TABLE_NAME + "(" + ID_KEY + " integer primary key not null,"
			+ DITTA_KEY + " integer not null," + CODICE_KEY + " text not null,"
			+ DESCRIZIONE_KEY + " text null," + USERNAME_KEY + " text null,"
			+ PASSWORD_KEY + " text null);";

	public static void UpdateToVersion(SQLiteDatabase db, int from, int to )
	{
		for(int ver = from +1; ver<= to; ver++)
		{
//			switch(ver)
//			{
//			case 2:
//				db.executeSql("");
//				break;
//			case 3:
//				db.executeSql("");
//				break;
//			}
		}
	}
	public static boolean Insert(int ID, int Ditta, String Codice,
			String Descrizione, String username, String pwd) {
		ContentValues cv = new ContentValues();

		cv.put(Tecnici.ID_KEY, ID);
		cv.put(Tecnici.DITTA_KEY, Ditta);
		cv.put(Tecnici.CODICE_KEY, Strings.CheckString(Codice));
		cv.put(Tecnici.DESCRIZIONE_KEY, Strings.CheckString(Descrizione));
		cv.put(Tecnici.USERNAME_KEY, Strings.CheckString(username));
		cv.put(Tecnici.PASSWORD_KEY, Strings.CheckString(pwd));

		return Common.db.Insert(Tecnici.TABLE_NAME, null, cv);
	}

	public static boolean Exists(String username, String pwd) {
		Cursor cursor = Common.db.query(Tecnici.TABLE_NAME,
				new String[] { Tecnici.ID_KEY }, Tecnici.USERNAME_KEY + "='"
						+ Strings.CheckString(username) + "' AND "
						+ Tecnici.PASSWORD_KEY + "='" + Strings.CheckString(pwd)
						+ "'", null, null, null, null);

		int count = 0;
		if (cursor != null) {
			count = cursor.getCount();
			cursor.close();
		}
		return (count > 0);
	}
	public static boolean Exists(int idTecnico) {
		Cursor cursor = Common.db.query(Tecnici.TABLE_NAME,new String[] { Tecnici.ID_KEY }, Tecnici.ID_KEY + "=" + Integer.toString(idTecnico), null, null, null, null);

		int count = 0;
		if (cursor != null) {
			count = cursor.getCount();
			cursor.close();
		}
		return (count > 0);
	}
	public static boolean Update(int ID, int Ditta, String Codice,
			String Descrizione, String username, String pwd) {
		ContentValues cv = new ContentValues();

		cv.put(Tecnici.DITTA_KEY, Ditta);
		cv.put(Tecnici.CODICE_KEY, Strings.CheckString(Codice));
		cv.put(Tecnici.DESCRIZIONE_KEY, Strings.CheckString(Descrizione));
		cv.put(Tecnici.USERNAME_KEY, Strings.CheckString(username));
		cv.put(Tecnici.PASSWORD_KEY, Strings.CheckString(pwd));

		return Common.db.Update(Tecnici.TABLE_NAME, cv, Tecnici.ID_KEY + " = "
				+ Integer.toString(ID), null);
	}

	public static Tecnico Select(String username, String password) {
		Tecnico ret = null;

		Cursor cursor = Common.db.query(
				Tecnici.TABLE_NAME,
				new String[] { Tecnici.ID_KEY, Tecnici.DITTA_KEY,
						Tecnici.CODICE_KEY, Tecnici.DESCRIZIONE_KEY,
						Tecnici.USERNAME_KEY, Tecnici.PASSWORD_KEY },
				Tecnici.USERNAME_KEY + "='" + Strings.CheckString(username)
						+ "' AND " + Tecnici.PASSWORD_KEY + "='"
						+ Strings.CheckString(password) + "'", null, null, null,
				null);

		if (cursor != null && cursor.moveToFirst()) {
			ret = new Tecnico();

			ret.ID = cursor.getInt(0);
			ret.Ditta = cursor.getInt(1);
			ret.Codice = cursor.getString(2);
			ret.Descrizione = cursor.getString(3);
			ret.Username = cursor.getString(4);
			ret.Password = cursor.getString(5);

			cursor.close();
			cursor = null;
		}
		return ret;
	}

	public static class Tecnico {
		public Tecnico() {
		}

		public int ID, Ditta;
		public String Codice, Descrizione, Username, Password;

		public static List<Tecnico> GetFromXml(String xml)
		{
			List<Tecnico> ret = new Vector<Tecnico>();
			
			if(xml !=null)
			{
				NodeList nodi = XmlParser.ParseNodes(xml, "TECNICO");
				if(nodi !=null)
				{
					int nodesCount = nodi.getLength();
					Tecnico t = null;
					
					for(int i=0; i < nodesCount; i++)
					{
						t = ParseFromXmlNode(nodi.item(i));
						if(t != null)
							ret.add(t);
					}
					
					t = null;
					nodi = null;
				}
				else
					Log.e("Tecnico.GetFromXml", "Errore durante il parse dei nodi, ritornato null");
			}
			else
				Log.e("Tecnico.GetFromXml", "Parametro xml nullo");
			
			return ret;
		}
		private static Tecnico ParseFromXmlNode(Node nodo) {
			Tecnico ret = new Tecnico();
			
			NodeList dettagli = nodo.getChildNodes();
			int detailsCount = dettagli.getLength();
			
			Element dettaglio = null;
			String nome = "";
			String valore = "";
			
			for(int i=0;i<detailsCount;i++)
			{
				try {
					if(dettagli.item(i).getNodeType() == Node.ELEMENT_NODE)
					{
						dettaglio = (Element)dettagli.item(i);
						nome = dettaglio.getNodeName();
						valore = dettaglio.getTextContent();
						
						if(nome.equals("ID"))
							ret.ID = Integer.parseInt(valore.trim());
						else if(nome.equals("TC01_DITTA_FW01"))
							ret.Ditta = Integer.parseInt(valore.trim());
						else if(nome.equals("TC01_CODICE"))
							ret.Codice = valore.trim();
						else if(nome.equals("TC01_DESCRIZIONE"))
							ret.Descrizione = valore.trim();
						
					}
				} catch (Exception e) {
					Log.e("Tecnico.ParseFromXmlNode", "Errore nel ciclo di assegnazione valori. Errore: " + e.toString());
					ret = null;
					break;
				}
			}
			
			dettaglio = null;
			dettagli = null;
			
			return ret;
		}
	}
}
